home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok29.lha / Strings / StringConv.mod < prev    next >
Text File  |  1993-08-15  |  3KB  |  143 lines

  1. (**********************************************************************
  2.  
  3.     :Program.    StringConv.mod
  4.     :Contents.   string formatting procedures
  5.     :Author.     Nicolas Benezan [bne]
  6.     :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
  7.     :Phone.      711/333679
  8.     :Copyright.  Public Domain
  9.     :Language.   Modula-2
  10.     :Translator. M2Amiga A+L V3.2d
  11.     :History.    V1.0 [bne] 11.May.1989
  12.     :History.    V1.1 [bne] 1.Oct.1989 (bugs fixed)
  13.  
  14. **********************************************************************)
  15.  
  16. IMPLEMENTATION MODULE StringConv;
  17.  
  18. FROM Arts       IMPORT Divs32;
  19. FROM SYSTEM     IMPORT ADR, CAST;
  20.  
  21. CONST
  22.   nul=CHR(0);
  23.  
  24. VAR
  25.   Ok: BOOLEAN;
  26.  
  27. PROCEDURE NumToStr (    Int, Base: LONGINT;
  28.                     VAR String: ARRAY OF CHAR);
  29.   CONST
  30.     DigitArray = "0123456789ABCDEF";
  31.  
  32.   VAR
  33.     Pos: INTEGER;
  34.  
  35.   PROCEDURE NextDigit;
  36.     TYPE
  37.       CharPtr = POINTER TO CHAR;
  38.     VAR
  39.       Digit: CharPtr;
  40.     BEGIN
  41.       IF (Pos<=HIGH(String)) THEN
  42.         Digit:= CAST (CharPtr, ADR (DigitArray) + (Int MOD Base));
  43.         Int:= Int DIV Base;
  44.         IF (Int # 0) THEN
  45.           NextDigit;
  46.         END;
  47.         String[Pos]:= Digit^;
  48.         INC (Pos);
  49.       ELSE
  50.         Ok:= FALSE;
  51.       END;
  52.     END NextDigit;
  53.  
  54.   BEGIN
  55.     IF Int#0 THEN
  56.       Pos:=0;
  57.       NextDigit;
  58.     ELSE
  59.       String[0]:="0";
  60.       Pos:=1;
  61.     END;
  62.     IF Pos<=HIGH(String) THEN
  63.       String[Pos]:=nul;
  64.     END;
  65.   END NumToStr;
  66.  
  67. PROCEDURE IntToStr (Int: LONGINT;
  68.                     VAR String: ARRAY OF CHAR);
  69.   BEGIN
  70.     NumToStr (Int, 10, String);
  71.   END IntToStr;
  72.  
  73. PROCEDURE StrToInt (String: ARRAY OF CHAR): LONGINT;
  74.   CONST
  75.     Base = 10;
  76.     MaxDivBase = MAX (LONGINT) DIV Base;
  77.   VAR
  78.     Int: LONGINT;
  79.     Pos: INTEGER;
  80.     Digit: CHAR;
  81.     Neg: BOOLEAN;
  82.   BEGIN
  83.     Int:= 0;
  84.     IF String[0] # "-" THEN
  85.       Pos:= 0;
  86.       Neg:= FALSE;
  87.     ELSE
  88.       Pos:= 1;
  89.       Neg:= TRUE;
  90.     END;
  91.     LOOP
  92.       IF Pos > HIGH(String) THEN
  93.         EXIT
  94.       END;
  95.       Digit:= String[Pos];
  96.       IF (Digit < "0") OR (Digit > "9") THEN
  97.         IF Digit # nul THEN
  98.           Ok:= FALSE;
  99.         END;
  100.         EXIT
  101.       END;
  102.       DEC (Digit, ORD ("0"));
  103.       IF Int <= MaxDivBase THEN
  104.         Int:= Int * Base;
  105.         IF Int <= MAX (LONGINT) - ORD (Digit) THEN
  106.           INC (Int, ORD (Digit));
  107.         ELSE (* overflow *)
  108.           Ok:= FALSE;
  109.           EXIT
  110.         END;
  111.       ELSE (* overflow *)
  112.         Ok:= FALSE;
  113.         EXIT
  114.       END;
  115.       INC (Pos);
  116.     END;
  117.     IF Neg THEN
  118.       RETURN -Int
  119.     ELSE
  120.       RETURN Int
  121.     END;
  122.   END StrToInt;
  123.  
  124. PROCEDURE IntToHex (    Int:LONGINT;
  125.                     VAR String:ARRAY OF CHAR);
  126.   BEGIN
  127.     NumToStr (Int, 16, String);
  128.   END IntToHex;
  129.  
  130. PROCEDURE ConversionOk (): BOOLEAN;
  131.   VAR
  132.     ConvOk: BOOLEAN;
  133.   BEGIN
  134.     ConvOk:= Ok;
  135.     Ok:= TRUE;
  136.     RETURN ConvOk
  137.   END ConversionOk;
  138.  
  139. BEGIN
  140.   Ok:=TRUE;
  141. END StringConv.
  142.  
  143.